#include "mq_connection.hpp"
#include <unistd.h>

void cb(bitmq::Channel::ptr &channel, std::string consumer_tag, const bitmq::BasicProperties *bp, const std::string &body)
{
    std::cout << consumer_tag << " 消费了消息：" << body << std::endl;
    channel->basicAck(bp->id());
}

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        std::cout << "usage: ./consume_client queue1" << std::endl;
        return -1;
    }
    // 1.实例化异步工作对象
    bitmq::AsyncWorker::ptr awp = std::make_shared<bitmq::AsyncWorker>();
    // 2.实例化连接对象
    bitmq::Connection::ptr conn = std::make_shared<bitmq::Connection>("127.0.0.1", 8085, awp);
    // 3.通过连接创建信道
    bitmq::Channel::ptr channel = conn->openChannel();
    // 4.使用信道提供的服务
    //   1.声明一个交换机
    google::protobuf::Map<std::string, std::string> tmp_map;
    channel->declareExchange("exchange1", bitmq::ExchangeType::DIRECT, true, false, tmp_map);
    //  2.声明一个队列queue1
    channel->declareQueue("queue1", true, false, false, tmp_map);
    //  3.声明一个队列queue2
    channel->declareQueue("queue2", true, false, false, tmp_map);
    //  4.绑定
    channel->queueBind("exchange1", "queue1", "queue1");
    channel->queueBind("exchange1", "queue2", "news.music.#");
    // 5.订阅消息队列,从订阅的消息队列中获取消息
    auto fun = std::bind(cb, channel, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
    channel->basicConsume("consumer1", argv[1], false, fun);

    while (1)
        sleep(3);
    conn->closeChannel(channel);
    // 6.关闭信道
    return 0;
}